路遙知碼力,日久練成精-只要在程式之路鑽研的夠深,便能夠充分發揮程式碼的力量; 練習的日子夠久,便能夠練成寫出精簡代碼的能力。
今天來繼續介紹兩個好用的運算子: 「加法」和「乘法」。
對於把字串連寫多次這件事,
很多程式語言並沒有很簡潔的寫法。
我們都知道在python中要宣告一個變數很簡單,
只要用等號賦值就好。例如:
s="Hello"
這樣即宣告了一個變數s,內容是字串"Hello"。
但是如果我們希望字串s的內容是"Hello"連續寫五次呢?
第一個方法就是乖乖把"Hello"打五次,寫:
s="HelloHelloHelloHelloHello"
雖然只要一行,但是若需要寫一百次Hello,豈不是非常占篇幅?
因此通常用for迴圈是比較好的解法:
s=""
for i in range(5):
s = s + "Hello"
# s 的值變成"HelloHelloHelloHelloHello"
哇,這麼簡單的事情居然就要寫三行,
簡直有違python的簡潔精神。
還好python有很方便的運算子,加法(+)和乘法(*),
如果用在字串或列表上的意思便是「串接」和「重複」。
上述程式其實只需一行,再也不必打一堆迴圈了:
s="Hello" * 5
接著示範更多例子:
>>> "234"+"abc"
'234abc'
>>> "2"+"3"
'23'
>>> "真" * 5 + "高興見到你"
'真真真真真高興見到你'
融會貫通,加法(+)和乘法(*)亦可以用在列表上:
>>> [2,4]+[5,6,9]
[2, 4, 5, 6, 9]
>>> [1] * 6
[1, 1, 1, 1, 1, 1]
有了這樣方便直覺的運算子,
其實可以非常方便的幫助我們繪製各種有趣的圖形。
教大家如何在螢幕上印出階梯圖形,
我們希望在螢幕上顯示7階的階梯,如下:
*
**
***
****
*****
******
*******
大家可以先停下來想一想怎麼做。
想好了嗎?有字串的重複運算應該不會太難,
觀察圖形,我們要
在第一行印出1顆星星,
在第二行印出2顆星星,
…
在第i行印出i顆星星。
因此用一層for迴圈遍歷即可:
for i in range(1,8):
print('*' * i)
(註: 給不熟悉python的朋友,range(a,b)表示起始位置為a(包含a),結束位置為b(不包含b)的整數區間,因此range(1,8)表示i會依序=1, 2, …, 7)
教大家如何在螢幕上印出階梯圖形,
我們希望在螢幕上顯示7階的金字塔,如下:
*
***
*****
*******
*********
***********
*************
大家也可以先停下來想一想怎麼做。
我們一樣觀察圖形,
第i行需要印的空格數= 總行數 - i
第i行需要印的星星數= 2*i -1
程式如下:
for i in range(1,8):
print(' ' * (7-i) + '*' * (2*i-1))
教大家如何在螢幕上印出菱形星星,
我們希望在螢幕上顯示到最寬為(7*2-1)個星星的菱形,如下圖:
*
***
*****
*******
*********
***********
*************
***********
*********
*******
*****
***
*
先停下來想一想怎麼做再往下看答案哦。
想到了嗎?
其實菱形星星我們可以想成是由一個範例3-2的「7階正金字塔」與一個「6階倒金字塔」組合的圖形。
那要如何印出「倒金字塔」呢?
其實就是把列印正金字塔的順序倒著印出來就行了。
這邊再教大家一個內建函數reversed(),倒轉列印的順序。
for i in reversed(range(1,7)):
print(' ' * (6-i) + '*' * (2*i-1))
結果為一個「6階倒金字塔」:
***********
*********
*******
*****
***
*
因此印出整個菱形可以這樣寫:
for i in range(1,8):
print(' ' * (7-i) + '*' * (2*i-1))
for i in reversed(range(1,7)):
print(' ' * (7-i) + '*' * (2*i-1))
注意拼成菱形時,「6階倒金字塔」前面會多一個空格,
因此第四行應寫 print(' ' * (7-i) + '*' * (2*i-1))
而非 print(' ' * (6-i) + '*' * (2*i-1))
。
基於資安,我們知道正常在網頁上登錄頁面輸入密碼欄位時,
密碼欄位都是看不到內容的,避免旁人偷窺。
如圖示:
請你實作一個函數hidePassword(),
def hidePassword(psd):
return #這邊輸入你要回傳的資料
參數psd表示一個非空字串,
在函數中回傳該字串的密碼字,防止別人偷窺密碼悠。
舉例來說:
輸入: psd = "password"
輸出: "********"
輸入: psd = "123"
輸出: "***"
(提示: 需要的工具都在Day4, Day5這兩篇了)
def hidePassword(psd):
return "".join(map(lambda x: "*", psd))
我來亂的。XD
def hidePassword(psd):
return '*'*len(psd)
pd=input("psd=")
print("密碼:"+hidePassword(pd))